package com.example.yan_music.model.net;


import com.example.yan_music.app.Api;
import com.example.yan_music.bean.UserInfo;
import com.example.yan_music.bean.wangyi.Banner;
import com.example.yan_music.bean.wangyi.Lyric;
import com.example.yan_music.bean.wangyi.NewSearchSong;
import com.example.yan_music.bean.wangyi.NewSongUrl;
import com.example.yan_music.bean.wangyi.RecommendSongList;
import com.example.yan_music.bean.wangyi.SongAlbum;
import com.example.yan_music.bean.wangyi.SongDetail;
import com.example.yan_music.bean.wangyi.SongListDetail;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 *  用于描述网络请求的接口
 *  采用 注解 + Observable<...>形式
 */
public interface NetRetrofitService {

    /**
     * 登录请求（手机号登录）
     *
     * @param phoneNum      手机号
     * @param password      密码
     * @return
     */
    @GET(Api.URL_LOGIN)
    Observable<UserInfo> login(@Query("phone") String phoneNum, @Query("password")String password);

    /**
     * 网络请求：搜索歌曲
     *
     * @param keywords  关键词
     * @param offset    分页（表示请求的是第几页）
     * @return
     */
    @GET(Api.URL_SEARCH)
    Observable<NewSearchSong> search(@Query("keywords") String keywords, @Query("offset") int offset);

    /**
     * 网络请求：获取歌曲播放的url
     *
     * @param songId    歌曲id
     * @return
     */
    @GET(Api.URL_MUSIC_PLAY)
    Observable<NewSongUrl> getSongPlayUrl(@Query("id")int songId);

    /**
     * 获取歌词
     *
     * @param songId    歌曲id
     * @return
     */
    @GET(Api.URL_MUSIC_LYRIC)
    Observable<Lyric> getSongLyric(@Query("id")int songId);

    /**
     * 获取歌曲所在专辑
     * 获取歌曲封面
     *
     * @param songId
     * @return
     */
    @GET(Api.URL_MUSIC_COVER)
    Observable<SongAlbum> getSongAlbum(@Query("id")int songId);

    /**
     * 获取轮播图
     *
     * @return
     */
    @GET(Api.URL_BANNER)
    Observable<Banner> getBanner();

    /**
     * 获取推荐歌单
     *
     * @param limit     一次获取多少个
     * @return
     */
    @GET(Api.URL_RECOMMEND_SONG_LIST)
    Observable<RecommendSongList> getRecommendSongList(@Query("limit")int limit);

    /**
     * 获取歌单详情
     *
     * @param songListId
     * @return
     */
    @GET(Api.URL_SONG_LIST_DETAIL)
    Observable<SongListDetail> getPlayListDetail(@Query("id")long songListId);

    /**
     * 获取歌曲详情
     *
     * @param ids
     * @return
     */
    @GET(Api.URL_SONG_DETAIL)
    Observable<SongDetail> getSongDetail(@Query("ids")String ids);
}
